/*
    isEven  判断偶数
        @param  number  number   输入的需要判断的数值

        @return boolean 判断 输入数据 是不是 偶数的结果 

        判断输入的数据是不是偶数 
        如果是偶数   返回值是 true
        如果不是偶数 返回值是 false 

*/
function isEven(number) {

    if (number % 2 === 0) {
        // 数值 可以被2整除 数值是 偶数
        // 通过 return 返回值是是 true
        return true;
    } else {
        // 数值 不能被2整除 数值是 奇数
        // 通过 return 返回值是是 false
        return false;
    }

}

/*
    isLeapYear  判断闰年

        @param  number  year    输入的需要判断是不是闰年的数值

        @return boolean 判断结果 

        对输入的数值判断是不是闰年

        如果是闰年 返回值 是 true
        如果不是闰年 返回值 是 false

*/
function isLeapYear(year) {

    if ((year % 400 === 0) || ((year % 4 === 0) && (year % 100 !== 0))) {
        // 满足 闰年的判断条件 返回值是 true
        return true
    } else {
        // 不满足 闰年的判断条件 返回值是 false
        return false
    }
}

// 封装函数返回值是 rgb字符串数据类型
function setColor() {
    return `rgb(${Math.random() * (255 + 1 - 0) + 0},${Math.random() * (255 + 1 - 0) + 0},${Math.random() * (255 + 1 - 0) + 0})`;
}

// 封装函数判断是不是质数
function isPrimeNumber(number) {
    for (var i = 2; i <= number / 2; i++) {
        if (number % i === 0) {
            // 如果发生整除 数值number是合数
            return false;
        }
    }

    return true;
}

/*
    getGCD  获取两个数值的最大公约数
        @param  number  num1  需要判断最大公约数的第一个数值
        @param  number  num2  需要判断最大公约数的第二个数值
        @return number  最大公约数

*/

function getGCD(num1, num2) {
    // 排序
    var min = Math.min(num1, num2);
    var max = Math.max(num1, num2);

    // 判断
    if (max % min === 0) {
        return min;
    } else {
        for (var i = min - 1; i >= 1; i--) {
            if (max % i === 0 && min % i === 0) {
                return i;
            }
        }
    }
}


/*
    getLCM  获取两个数值的最小公倍数
        @param  number  num1  需要判断最小公倍数的第一个数值
        @param  number  num2  需要判断最小公倍数的第二个数值
        @return number  最小公倍数

*/

function getLCM(num1, num2) {
    // 排序
    var min = Math.min(num1, num2);
    var max = Math.max(num1, num2);

    // 判断
    if (max % min === 0) {
        return max;
    } else {
        for (var i = max + 1; i <= min * max; i++) {
            if (i % min === 0 && i % max === 0) {
                return i;
            }
        }
    }
}

/*
    isPalindromeString  判断回文字符串
        @param  string  str 输入的要判断的字符串
        @return boolean 是回文字符串返回值true 不是回文字符串返回值false

*/

function isPalindromeString(str) {
    var arr = str.split('');
    arr.reverse()
    var newStr = arr.join('');
    if (newStr === str) {
        return true;
    } else {
        return false;
    }
}


/*
    mySetVc 获取验证码字符串
        @param  string  str     验证码内容范围字符串    默认值是 小写字符 大写字符 数字
        @param  number  num     验证码位数             默认值是 6位
        @param  boolean bool    验证码内容能不能重复    默认值是 true 可以重复

        @return string  vc      生成的验证码字符串内容
*/

function mySetVc(str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', num = 6, bool = true) {
    // 定义变量 存储 验证码字符串内容
    var vc = '';

    // 通过循环 拼接生成 验证码字符串内容
    while (vc.length < num) {

        if (bool) {
            // 如果 bool 是 true 内容可以重复 直接 拼接写入
            vc += str[parseInt(Math.random() * (str.length - 1 + 1 - 0) + 0)];

            // 如果 bool 是 false 内容不能重复 判断这个字符没有 再写入
        } else {
            // 获取随机字符
            var s = str[parseInt(Math.random() * (str.length - 1 + 1 - 0) + 0)];

            // 查询判断没有之后 再拼接
            if (vc.indexOf(s) === -1) {
                vc += s;
            }
        }

    }

    // 返回拼接的字符串内容
    return vc;
}


/*
    myGetDate   获取时间对象中的时间数据

        @param  string  time    要获取的时间

        @return object  时间对象中存储的时间数据

*/
function myGetDate(time) {
    // // 定义一个变量
    // var t ;

    // // 如果有输入的参数数据 获取的是 参数数据对应的时间对象
    // // 如果没有输入的参数数据 time存储 undefined
    // if( time === undefined ){
    //     // 没有赋值实参数据 获取 当前事件的时间对象
    //     t = new Date() ;
    // }else{
    //     // 赋值实参数据 获取 实参数据对应的时间
    //     t = new Date( time )
    // }

    // 形参存储undefined 是 没有实参 获取当前时间对象
    // 形参存储不是undefined 有实参 获取实参时间对象
    var t = time === undefined ? new Date() : new Date(time);

    // 定义星期数组
    var weekArr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];

    // 定义返回值
    // 函数的返回值一般不前导补零 实际程序需要时 在程序中前导补零
    return {
        year: t.getFullYear(),
        month: t.getMonth() + 1,
        day: t.getDate(),
        week: weekArr[t.getDay()],
        hours: t.getHours(),
        minutes: t.getMinutes(),
        seconds: t.getSeconds(),
    }
}

/*
    myGetCountDown  获取倒计时结果
        @param  string  end     终止时间

        @return object  倒计时的结果时间

*/

function myGetCountDown(end) {
    // 1, 创建时间对象

    // 终止时间对象
    var endTime = new Date(end);

    // 起始时间对象 是 当前时间
    var startTime = new Date();

    // 2, 计算时间差 单位 转化为 秒
    var time = parseInt((endTime.getTime() - startTime.getTime()) / 1000);

    // 3, 计算 天 小时 分钟 秒
    return {
        day: parseInt(time / (24 * 60 * 60)),
        hours: parseInt(time % (24 * 60 * 60) / (60 * 60)),
        minutes: parseInt(time % (60 * 60) / 60),
        seconds: time % 60,
    }

}


/*
    myGetUrlVal 获取 url地址栏参数 
        @return object 返回获取的地址栏数据参数 数据类型为对象形式

*/

function myGetUrlVal() {
    // 定义 空对象 存储执行结果
    var obj = {};

    // 获取 地址栏中携带的参数数据 不需要 ? 问号
    var str = window.location.search.substr(1);

    // 按照 & 符号 将 字符串分割为数组
    var arr1 = str.split('&');

    // 循环遍历数组 数组单元存储的是 键值=键值 
    // 按照 = 分割数组单元存储的数据
    arr1.forEach(function (item) {
        // arr2[0] 是 键名 也就是 对象的属性
        // arr2[1] 是 键值 也就是 对象的属性值 需要还原为对应的字符串
        var arr2 = item.split('=');

        // 先判断 对象中 有没有 属性
        if (obj[arr2[0]] === undefined) {
            // 证明没有这个属性 直接 给对象新增 属性和属性值
            obj[arr2[0]] = window.decodeURIComponent(arr2[1]);

        } else {
            // 证明有这个属性

            // 判断 属性值的数据类型
            if (typeof (obj[arr2[0]]) === 'string') {
                // 如果数据类型是 字符串 
                // 转化为 存储数组 
                // 数组的第一个单元是 原始数据 obj[ arr2[0] ]
                // 数组的第二个单元是 当前数据 arr2[1]
                obj[arr2[0]] = [obj[arr2[0]], window.decodeURIComponent(arr2[1])];

            } else {
                // 如果数据类型 不是 字符串
                // 直接给数组新增数据单元
                obj[arr2[0]].push(window.decodeURIComponent(arr2[1]));
            }

        }
    })

    // 返回这个对象
    return obj;

}


